package br.com.comprasPublicas.entity;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.NamedNativeQueries;
import org.hibernate.annotations.NamedNativeQuery;
import org.hibernate.annotations.NamedQuery;

/**
 *
 * @author helsen_rafael
 * @since 11/01/11
 */
@Entity
@NamedNativeQueries({
        @NamedNativeQuery(name="order_by_id_produto", query="SELECT * FROM produto ORDER BY id_produto",resultClass=Produto.class),
        @NamedNativeQuery(name="order_by_produto", query="SELECT * FROM produto ORDER BY nome_produto ASC",resultClass=Produto.class),
        @NamedNativeQuery(name="select_max_id_produto", query="SELECT * FROM produto",resultClass=Produto.class),
        @NamedNativeQuery(name="executa_consulta_grupo", query="SELECT * FROM grupoProduto",resultClass=GrupoProduto.class)
})
public class Produto implements Serializable {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id_produto;
    
    @Column(name="nome_produto", length=30, nullable=false)
    private String nome;
    
    @Column(name="tipo_produto", length=20, nullable=false)
    private String tipo;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name="id_grupo", insertable=true, updatable=true)
    @Fetch(FetchMode.JOIN)
    @Cascade(CascadeType.SAVE_UPDATE)
    private GrupoProduto grupo;

    @Column(name="valor_medio_produto", nullable=false)//Pesquisar Annotation Double
    private double valor_medio;

    @Column(name="unidade_produto", length=4, nullable=false)
    private String unidade;

    @Cascade(CascadeType.ALL)

    //Abaixo os Encapsulamentos dos Campos

    public int getId_produto() {
        return id_produto;
    }

    public void setId_produto(int id_produto) {
        this.id_produto = id_produto;
    }

    
    public String getNome() {
        return nome;
    }

    
    public void setNome(String nome) {
        this.nome = nome;
    }


    
    public String getTipo() {
        return tipo;
    }

    
    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    
    public GrupoProduto getGrupo() {
        return grupo;
    }

   
    public void setGrupo(GrupoProduto grupo) {
        this.grupo = grupo;
    }

    
    public double getValor_medio() {
        return valor_medio;
    }

    
    public void setValor_medio(double valor_medio) {
        this.valor_medio = valor_medio;
    }

    
    public String getUnidade() {
        return unidade;
    }

    
    public void setUnidade(String unidade) {
        this.unidade = unidade;
    }
}
